﻿@*
//------------------------------------------------------------------------------
//  此代码版权声明为全文件覆盖，如有原作者特别声明，会在下方手动补充
//  此代码版权（除特别声明外的代码）归作者本人Diego所有
//  源代码使用协议遵循本仓库的开源协议及附加协议
//  Gitee源代码仓库：https://gitee.com/diego2098/ThingsGateway
//  Github源代码仓库：https://github.com/kimdiego2098/ThingsGateway
//  使用文档：https://diego2098.gitee.io/thingsgateway-docs/
//  QQ群：605534569
//------------------------------------------------------------------------------
*@

@page "/admin/menu"
@using System.Linq.Expressions;
@using BlazorComponent;
@using Masa.Blazor.Presets;
@using Microsoft.AspNetCore.Authorization;
@using ThingsGateway.Admin.Application;

@namespace ThingsGateway.Admin.Blazor
@attribute [Authorize]
@inherits BaseComponentBase
@inject UserResoures UserResoures
@layout MainLayout
<MRow Style=@(IsMobile? "height:100%;":$"height: calc(100vh - {BlazorResourceConst.DefaultHeight}px)")>
    <MCol Md=3 Cols="12">
        <MCard Class="ma-2" Style="height:100%">
            <MCardTitle>
                <MTextField Dense Style="max-width:200px;" HideDetails=@("auto") Class="mx-2 my-1" @bind-Value="_searchName"
                            Outlined Label=@typeof(SysResource).GetDescription(nameof(SysResource.Title)) />
            </MCardTitle>
            <MTreeview Dense TItem="SysResource" TKey="long" ActiveChanged=@(
                       async a=>
                       {
                       search.ParentId=a.FirstOrDefault();
                       await DataTableQueryAsync();
                       }
                       )
                       Items="MenuCatalog" ItemText="r=>r.Title" ItemChildren="r=>r.Children"
                       Search="@_searchName" OpenOnClick
                       Activatable ItemKey=@(r=>r.Id)>
                <PrependContent>
                    <MIcon>
                        @context.Item.Icon
                    </MIcon>
                </PrependContent>
                <LabelContent>
                    <span title=@context.Item.Title>
                        @context.Item.Title
                    </span>
                </LabelContent>
            </MTreeview>
        </MCard>
    </MCol>
    <MCol Md=9 Cols="12">

        <AppDataTable @ref="_datatable" TItem="SysResource" SearchItem="MenuPageInput" DescFunc=@(memberInfo=>memberInfo.GetCustomAttribute<SqlSugar.SugarColumn>(true)?.ColumnDescription)
                      AddItem="MenuAddInput" EditItem="MenuEditInput"
                      SearchModel="@search" IsMenuOperTemplate=false
                      QueryCallAsync="QueryCallAsync" AddCallAsync="AddCallAsync" EditCallAsync="EditCallAsync" DeleteCallAsync="DeleteCallAsync"
                        IsShowDetailButton IsShowQueryButton IsShowSearchKey
                      IsShowAddButton=@UserResoures.IsHasButtonWithRole("sysspaadd")
                      IsShowDeleteButton=@UserResoures.IsHasButtonWithRole("sysspadelete")
                      IsShowEditButton=@UserResoures.IsHasButtonWithRole("sysspaedit")>

            <AddTemplate>
                @if (search.ParentId == 0)
                {
                    context.TargetType = TargetTypeEnum.None;
                }
                @GetRenderFragment(context)

            </AddTemplate>

            <EditTemplate>
                <MSubheader Class="mt-4 font-weight-black">改变父级</MSubheader>
                <MSelect Class="mr-3" @bind-Value=@context.ParentId Outlined
                         Items=@(MenuCatalog)
                         MenuProps="@(props => { props.Bottom = true; props.OffsetY = true; })"
                         ItemText=@((u) =>u.Title) ItemValue=@(u =>u.Id)
                         HideDetails=@("auto") Height="30" Dense>
                </MSelect>

                @GetRenderFragment(context)

            </EditTemplate>

            <ItemColOperTemplate>
                @if (context.Item.TargetType == TargetTypeEnum.SELF || context.Item.TargetType == TargetTypeEnum.BLANK)
                {
                    <MButton Color="info" Text StopPropagation OnClick=@(()=>ShowButtonListAsync(context.Item.Id))>
                        按钮
                    </MButton>
                }
            </ItemColOperTemplate>

            <ItemColTemplate>
                @switch (context.Header.Value)
                {
                    case nameof(context.Item.Icon):
                        <MIcon>
                            @context.Value
                        </MIcon>
                        break;
                    default:
                        @if (context.Header.CellClass?.Contains("text-truncate") == true)
                        {
                            <span title=@context.Value>
                                @context.Value
                            </span>
                        }
                        else
                        {
                            @context.Value
                        }
                        break;
                }

            </ItemColTemplate>
        </AppDataTable>

    </MCol>
</MRow>



<PDrawer @bind-Value="IsShowButtonList" OnCancel="() => IsShowButtonList = false"
         Title=按钮
         Width=@(IsMobile?"100%":"800")
         MaxWidth="800">
    @if (IsShowButtonList)
    {
        <AppDataTable @ref="_buttonsDatatable" TItem="SysResource" SearchItem="ButtonPageInput" DescFunc=@(memberInfo=>memberInfo.GetCustomAttribute<SqlSugar.SugarColumn>(true)?.ColumnDescription)
                      AddItem="ButtonAddInput" EditItem="ButtonEditInput"
                      QueryCallAsync="ButtonQueryCallAsync" AddCallAsync="ButtonAddCallAsync"
                      EditCallAsync="ButtonEditCallAsync" DeleteCallAsync="ButtonDeleteCallAsync"
                        IsShowQueryButton IsShowClearSearch=false Filters=ButtonFilters IsShowFilter=false
                      IsShowAddButton=@UserResoures.IsHasButtonWithRole("sysbuttonadd")
                      IsShowDeleteButton=@UserResoures.IsHasButtonWithRole("sysbuttondelete")
                      IsShowEditButton=@UserResoures.IsHasButtonWithRole("sysbuttonedit")>

            <AddTemplate>
                @GetButtonRenderFragment(context)
            </AddTemplate>

            <EditTemplate>
                @GetButtonRenderFragment(context)
            </EditTemplate>

        </AppDataTable>

    }

</PDrawer>



@code {

    RenderFragment GetRenderFragment(MenuAddInput context)
    {
        RenderFragment renderFragment =
    @<div>

        <MSubheader Class="mt-4 font-weight-black"> @(context.Description(x => x.Title))  </MSubheader>
        <MTextField Dense Outlined HideDetails="@("auto")" @bind-Value=@context.Title />

        <MSubheader Class="mt-4 font-weight-black">    @(context.Description(x => x.Component))  </MSubheader>
        <MTextField Dense Outlined HideDetails="@("auto")" @bind-Value=@context.Component />

        <MSubheader Class="mt-4 font-weight-black">    @(context.Description(x => x.TargetType))  </MSubheader>
        <MSelect Class="mt-3 mr-3" @bind-Value="context.TargetType" Outlined
                 Items=@(typeof(TargetTypeEnum).GetEnumList()) Clearable
                 MenuProps="@(props => { props.Bottom = true; props.OffsetY = true; })"
                 ItemText=@((u) =>u.Description)
                 ItemValue=@(u =>(TargetTypeEnum)u.Value)
                 HideDetails="true" Height="30"
                      Dense>
        </MSelect>


        <MSubheader Class="mt-4 font-weight-black">    @(context.Description(x => x.Icon))  </MSubheader>
        <MTextField Dense Outlined HideDetails="@("auto")" @bind-Value=@context.Icon />

        <MSubheader Class="mt-4 mb-5 font-weight-black">@(context.Description(x => x.SortCode)) </MSubheader>
        <MSlider @bind-Value=@context.SortCode Class="mb-5" TValue=int ThumbLabel="@("always")" Dense />


    </div>

    ;
        return renderFragment;
    }
    RenderFragment GetButtonRenderFragment(ButtonAddInput context)
    {
        RenderFragment renderFragment =
    @<div>
        <MSubheader Class="mt-4 font-weight-black"> @(context.Description(x => x.Title))  </MSubheader>
        <MTextField Dense Outlined HideDetails="@("auto")" @bind-Value=@context.Title />

        <MSubheader Class="mt-4 font-weight-black">    @(context.Description(x => x.Code))  </MSubheader>
        <MTextField Dense Outlined HideDetails="@("auto")" @bind-Value=@context.Code />


        <MSubheader Class="mt-4 mb-5 font-weight-black">@(context.Description(x => x.SortCode)) </MSubheader>
        <MSlider @bind-Value=@context.SortCode Class="mb-5" TValue=int ThumbLabel="@("always")" Dense />


    </div>

    ;
        return renderFragment;
    }
}
